Systems Manager ステートマネージャーと User data の機能の違いについて考えてみる
こんにちは、望月です。
前回、ブログにて Systems Manager ステートマネージャーを利用し起動時に Web サーバーのセットアップを行いました。そこで気になったのがいままで User data を利用し、やっていたことをステートマネージャーでも出来るのではないか。出来るとして違いって何があったっけ。ということです。
ということで本記事ではステートマネージャーと User data の機能の違いについて考えてみたいと思います。
概要について
User data とは
インスタンスの起動時に指定したコマンドを cloud-init を介して実行することが出来ます。 AMI として利用できる Linux であれば cloud-init によるセットアップが基本的に行われるかと思うので提供されているディストリビューション関係なく利用することができます。
Amazon Linux - Amazon Elastic Compute Cloud
Systems Manager ステートマネージャーとは
EC2 インスタンスなどの AWS リソースに対して、設定管理を行うことが出来ます。
SSM ドキュメントを利用し、ターゲットやスケジュールなどを指定することで継続的に状態を保つことができます。
ここではドキュメント AWS-RunShellScript
を利用する場合の User data との違いというのを考えてみたいと思います。
AWS Systems Manager State Manager - AWS Systems Manager
機能の違い
実行条件
- User data
- インスタンスの起動時のみ実行できる
- 事前にエージェント等のインストールは不要
- ステートマネージャー
- スケジュールによる複数回の実行や一度のみ実行といった形で状況に合わせて実行することができる
- 事前に SSM Agent のインストールを行い Systems Manager で管理できる状態である必要がある
- SSM Agent のインストールや IAM ロールでの権限設定、サービスエンドポイントへの接続などを設定をする必要があります
ターゲット
- User data
- 起動時や起動テンプレートで指定し起動したインスタンスに対し実行される
- 実行する内容を分けたり、細かく対象を分けることが難しい
- ステートマネージャー
- タグ、リソースグループ、手動、すべてのインスタンスなど、様々な条件で指定したインスタンスに対し実行される
- 細かく対象を分けることが出来るため、すべてのインスタンスに対し実行する内容や一部のインスタンスに対して実行する内容を分けることができる
- 例えば、アンチウイルスソフトのインストールなどすべてのインスタンスを対象にしたコマンドと Web サーバーのセットアップのコマンドを分けて管理することができます
実行権限
- User data
root
にて実行
- ステートマネージャー
root
にて実行
ログ
- User data
- 実行するコマンドの出力をローカルに保存する
- ステートマネージャー
- AWS コンソールの Run Command の実行履歴からログを確認することができる
バージョン管理
- User data
- 起動時のみの実行のためバージョン管理というのはありません
- ステートマネージャー
- 実行内容の変更をバージョン管理することができます。
- 注意点としてバージョンごとに対象インスタンスでコマンド実行されるため、複数回コマンド実行されても問題ないよう冪等性を意識して変更を行わなければ意図しない問題が発生する可能性があります。
- 実行内容の変更をバージョン管理することができます。
まとめ
インスタンスを Systems Manager で管理を行う場合はステートマネージャーを利用した場合のほうが管理面でのメリットが多いかと感じました。 特に実行ログが気軽に残すことが出来ることや細かく実行する内容を分けて管理できるのは User data では難しかったため、ステートマネージャーのメリットかと思います。
一方でステートマネージャーは Systems Manager での管理を前提としているため、SSM を利用しないもしくは利用できないということであれば User data を使うことになるかと思います。
Systems Manager での管理などを考えている場合はステートマネージャーの利用もご検討いただければと思います。